home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Interactive 7
/
PC World Interactive 7.iso
/
program
/
qbprog.EXE
/
MODENE.BAS
< prev
next >
Wrap
BASIC Source File
|
1980-01-10
|
6KB
|
188 lines
'===========================================================================
'QBASIC'de de çalìƒìr
' bu dilde bellek sorunu nedeniyle yavaƒ bir hìz seçiniz.
'QuickBasic de çalìƒmasì için ise versiyon 7.1 QBX /L QBX /C:32000
' versiyon 4.5 QB /L QB /C:32000
' ƒeklinde yüklenmelidir.
'Her türlü modemde çalìƒan iletiƒim programì Çekirdek mödülü
'===========================================================================
DECLARE SUB EkranAc (Tip!)
DECLARE SUB Terminal ()
DECLARE SUB ModemiKapa (ModemAdresi!)
DECLARE SUB ModemiAc (ModemAdresi!, Hiz!, IrqNo!)
DIM SHARED Sakla(27)
'===========================================================================
'Deºiƒkenler
'Kendi modem bilgilerinizi giriniz
Irq = 5: Port = &H3E8: Baud = 57600: Ansi = 1
'Seçenekler
'Irq = 2: Port = &H2E8: Baud = 2400 : Ansi = 1
'Irq = 3: Port = &H2F8: Baud = 4800 : Ansi = 0
'Irq = 4: Port = &H3E8: Baud = 9600
'Irq = 5: Port = &H3F8: Baud = 14400
'Irq = 7 : Baud = 19200
' Baud = 38400
' Baud = 57600
' Baud = 115200
'===========================================================================
'Program baƒlangìcì
CALL ModemiAc(Port, Baud, Irq)
EkranAc (Ansi)
Terminal
ModemiKapa (Port)
END
'===========================================================================
'IRQ hattìnìn açìlmasì için makine dili yordamì
IRQSerbest:
DATA &H50 : 'PUSH AX
DATA &H53 : 'PUSH BX
DATA &H51 : 'PUSH CX
DATA &HFA : 'CLI
DATA &H31, &HC9 : 'XOR CX,CX
DATA &HB1, 2 : 'MOV CL,02
DATA &HBB, 1, 0 : 'MOV BX,0001
DATA &HD3, &HE3 : 'SHL BX,CL
DATA &HF7, &HD3 : 'NOT BX
DATA &HE4, &HA1 : 'IN AL,A1
DATA &H20, &HF8 : 'AND AL,BH
DATA &HE6, &HA1 : 'OUT A1,AL
DATA &HE4, &H21 : 'IN AL,21
DATA &H20, &HD8 : 'AND AL,BL
DATA &HE6, &H21 : 'OUT 21,AL
DATA &HFB : 'STI
DATA &H59 : 'POP CX
DATA &H5B : 'POP BX
DATA &H58 : 'POP AX
DATA &HCB : 'RETF
'Ekran Ansi veya TTY modda açìlìyor
SUB EkranAc (Tip)
IF Tip = 1 THEN
OPEN "CON" FOR OUTPUT AS #2 'Ansi
ELSE
OPEN "SCRN:" FOR OUTPUT AS #2 'TTY
END IF
END SUB
SUB ModemiAc (ModemAdresi, Hiz, IrqNo)
'===========================================================================
'Bazì deºerler saklanìyor
DEF SEG = 0
FOR I = 40 TO 63 'ÿnterrupt adresleri
Sakla(I - 40) = PEEK(I)
NEXT
Sakla(24) = INP(&H21) '8259 (PIC) deºerleri
Sakla(25) = INP(&HA1)
Sakla(26) = PEEK(1026) 'Com2 eski aygìt adresi
Sakla(27) = PEEK(1027)
'===========================================================================
'Com2'ye bizim modem atanìyor
POKE 1027, ModemAdresi \ 256
POKE 1026, ModemAdresi AND 255
'===========================================================================
'Yeni aygìt (bizim modem) açìlìyor
OPEN "Com2:2400,N,8,1" FOR RANDOM AS #1
'===========================================================================
'Modem seçilen hìz için ayarlanìyor
Sakla = INP(ModemAdresi + 3)
OUT ModemAdresi + 3, 128
OUT ModemAdresi, 115200 / Hiz
OUT ModemAdresi + 3, Sakla
'===========================================================================
'Com2'ye ait IRQ3 kapatìlìyor, PIC deºerleri iade ediliyor
OUT &H21, Sakla(24)
OUT &HA1, Sakla(25)
'===========================================================================
'Bizim modeme ait IRQ'nun, Com2'ye ait interruptu kullanmasì saºlanìyor
IntAdres = (IrqNo + 8) * 4
POKE IntAdres, PEEK(44)
POKE IntAdres + 1, PEEK(45)
POKE IntAdres + 2, PEEK(46)
POKE IntAdres + 3, PEEK(47)
'===========================================================================
'Bizim modemin IRQ'su için 8259'dan izin alìnìyor
RESTORE IRQSerbest
REDIM Oku(31)
DEF SEG = VARSEG(Oku(0))
FOR PicMask = 0 TO 31
READ D%
IF PicMask = 7 THEN D% = IrqNo
POKE VARPTR(Oku(0)) + PicMask, D%
NEXT PicMask
CALL ABSOLUTE(VARPTR(Oku(0)))
'Modemin açìlmasì tamamlandì
END SUB
SUB ModemiKapa (ModemAdresi)
'===========================================================================
'Modem kapatìlìyor
PRINT #1, "ATH"
OUT ModemAdresi + 4, (INP(ModemAdresi + 4) AND 252)
CLOSE #1
'===========================================================================
'Eski deºerler iade ediliyor
DEF SEG = 0
FOR I = 40 TO 63: 'ÿnterrupt adresleri
POKE I, Sakla(I - 40)
NEXT
OUT &H21, Sakla(24) 'PIC deºerleri
OUT &HA1, Sakla(25)
POKE 1026, Sakla(26) 'Com2 adresi
POKE 1027, Sakla(27)
END SUB
SUB Terminal
COLOR 7, 1
CLS
LOCATE 1, 1, 1: PRINT "Modem ÿnstall ediliyor"
PRINT #1, "ATZ"
RR = FIX(TIMER)
DO
IF LOC(1) > 0 THEN B$ = B$ + INPUT$(LOC(1), #1)
IF INSTR(B$, "OK") > 0 THEN EXIT DO
IF FIX(TIMER) - RR > 5 THEN
PRINT "Modem Port Adresi ve IRQ deºerleri hatalì !!"
RETURN
END IF
LOOP
LOCATE 1, 1, 1: PRINT "Modem uygun bulundu, baƒladì (Çìkìƒ için Esc)"
DO
A$ = INKEY$
IF A$ <> "" THEN
IF ASC(A$) = 27 THEN EXIT DO
PRINT #1, A$; : 'Modem girdisi
ELSE
IF LOC(1) > 0 THEN
B$ = INPUT$(LOC(1), #1): Gelen$ = Gelen$ + B$
Z = 0
IF INSTR(Gelen$, CHR$(0) + CHR$(72)) > 0 THEN Z = 1: PRINT "Yukarì Cursore basìldì"
IF INSTR(Gelen$, CHR$(0) + CHR$(80)) > 0 THEN Z = 1: PRINT "Aƒaºì Cursore basìldì"
IF INSTR(Gelen$, CHR$(0) + CHR$(75)) > 0 THEN Z = 1: PRINT "Sol Cursore basìldì"
IF INSTR(Gelen$, CHR$(0) + CHR$(77)) > 0 THEN Z = 1: PRINT "Saº Cursore basìldì"
IF Z = 1 THEN Gelen$ = ""
IF Z = 0 THEN PRINT #2, B$; : 'Diºer tuƒ
END IF
END IF
LOOP
END SUB